Obvladajte protokol MQTT za IoT z uporabo Pythona. Ta poglobljen vodnik zajema načela, knjižnico Paho-MQTT, varnost in implementacijo v realnih projektih.
Python za IoT: Celovit vodnik za implementacijo MQTT
Povezani svet: Zakaj so protokoli IoT pomembni
Živimo v dobi povezljivosti brez primere. Internet stvari (IoT) ni več futuristični koncept; je globalna realnost, ki tiho plete mrežo milijard pametnih naprav, ki spremljajo naše okolje, avtomatizirajo naše domove, optimizirajo našo industrijo in poenostavljajo naša mesta. Od pametnega termostata v domu v Seulu do kmetijskega senzorja na polju v ruralni Keniji, te naprave ustvarjajo ogromno količino podatkov. Toda kako vse te naprave komunicirajo med seboj in z oblakom, še posebej, ker so pogosto majhne, z nizko porabo energije in delujejo na nezanesljivih omrežjih? Odgovor leži v specializiranih komunikacijskih protokolih.
Medtem ko protokol HTTP poganja večino spleta, ki ga uporabljamo vsak dan, je pogosto pretežak in energetsko potraten za omejen svet IoT. Tu zasijejo protokoli, zasnovani posebej za komunikacijo med napravami (M2M). Med njimi se je kot prevladujoča sila uveljavil: MQTT.
Ta celovit vodnik je namenjen razvijalcem, inženirjem in hobistom po vsem svetu, ki želijo izkoristiti moč MQTT z uporabo Pythona, enega najbolj vsestranskih in priljubljenih programskih jezikov na področju IoT. Potovali bomo od temeljnih konceptov MQTT do izgradnje varnih, robustnih in razširljivih aplikacij IoT.
Kaj je MQTT? Protokol, zgrajen za omejitve
MQTT je kratica za Message Queuing Telemetry Transport. Leta 1999 sta ga izumila dr. Andy Stanford-Clark iz IBM-a in Arlen Nipper iz Arcoma (zdaj Cirrus Link) za nadzor naftovodov preko nezanesljivih satelitskih omrežij. Njegova zgodba o nastanku odlično povzema njegov namen: biti lahek, zanesljiv in učinkovit sporočilni protokol za naprave, ki delujejo pod znatnimi omejitvami.
Pojasnilo modela objavi/naroči se (Pub/Sub)
V središču MQTT je eleganten arhitekturni vzorec objavi/naroči se. To je temeljni odmik od modela zahteva/odgovor protokola HTTP, ki ga pozna večina razvijalcev. Namesto da bi odjemalec neposredno zahteval informacije od strežnika, je komunikacija razvezana.
Predstavljajte si globalno tiskovno agencijo. Novinarji (objavitelji) ne pošiljajo svojih zgodb neposredno vsakemu bralcu. Namesto tega jih pošljejo v osrednje središče agencije (posrednik) in jih kategorizirajo pod določene teme, kot sta "Svetovna politika" ali "Tehnologija". Bralcem (naročnikom) ni treba spraševati novinarjev za posodobitve; agenciji preprosto povedo, katere teme jih zanimajo. Agencija nato samodejno posreduje vse nove zgodbe na teh temah zainteresiranim bralcem. Novinarjem in bralcem nikoli ni treba vedeti za obstoj, lokacijo ali status drug drugega.
V MQTT ta model razveže napravo, ki pošilja podatke (objavitelj), od naprave ali aplikacije, ki jih prejema (naročnik). To je izjemno močno za IoT, ker:
- Prostorska razvezanost: Objavitelju in naročniku ni treba poznati IP naslova ali lokacije drug drugega.
- Časovna razvezanost: Ni jima treba delovati hkrati. Senzor lahko objavi odčitek, aplikacija pa ga lahko prejme ure kasneje, če je sistem tako zasnovan.
- Sinhronizacijska razvezanost: Operacij na obeh straneh ni treba ustaviti, da bi počakale, da druga stran zaključi izmenjavo sporočil.
Ključne komponente ekosistema MQTT
Arhitektura MQTT temelji na nekaj osrednjih komponentah:
- Posrednik (Broker): Osrednje središče ali strežnik. Je poštni urad sveta MQTT. Posrednik je odgovoren za prejemanje vseh sporočil od objaviteljev, njihovo filtriranje po temah in pošiljanje ustreznim naročnikom. Priljubljeni posredniki vključujejo odprtokodne možnosti, kot sta Mosquitto in VerneMQ, ter upravljane oblačne storitve, kot so AWS IoT Core, Azure IoT Hub in Google Cloud IoT Core.
- Odjemalec (Client): Katerakoli naprava ali aplikacija, ki se poveže s posrednikom. Odjemalec je lahko objavitelj, naročnik ali oboje. Senzor IoT je odjemalec, prav tako pa tudi strežniška aplikacija, ki obdeluje podatke senzorja.
- Tema (Topic): Niz UTF-8, ki deluje kot naslov ali oznaka za sporočila. Posrednik uporablja teme za usmerjanje sporočil. Teme so hierarhične in uporabljajo poševnice kot ločila, podobno kot pot datotečnega sistema. Dober primer teme za senzor temperature v dnevni sobi v stavbi v Londonu bi lahko bil:
UK/London/Building-A/Floor-1/LivingRoom/Temperature. - Vsebina (Payload): To je dejanska vsebina sporočila. MQTT je podatkovno agnostičen, kar pomeni, da je vsebina lahko karkoli: preprost niz, celo število, JSON, XML ali celo šifrirani binarni podatki. JSON je zelo pogosta izbira zaradi svoje prilagodljivosti in berljivosti.
Zakaj MQTT prevladuje v komunikaciji IoT
Zasnovna načela MQTT ga naredijo izjemno primernega za izzive IoT:
- Lahek: Sporočila MQTT imajo zelo majhno glavo (le 2 bajta), kar zmanjšuje porabo omrežne pasovne širine. To je ključno za naprave na dragih mobilnih paketih ali omrežjih z nizko pasovno širino, kot je LoRaWAN.
- Učinkovit: Nizka obremenitev protokola se neposredno odraža v nižji porabi energije, kar omogoča napravam na baterijsko napajanje delovanje več mesecev ali celo let.
- Zanesljiv: Vključuje funkcije za zagotavljanje dostave sporočil, tudi preko nestabilnih omrežij z visoko zakasnitvijo. To se upravlja preko ravni kakovosti storitve.
- Razširljiv: En sam posrednik lahko hkrati obravnava povezave tisočev ali celo milijonov odjemalcev, zaradi česar je primeren za obsežne implementacije.
- Dvosmeren: MQTT omogoča komunikacijo od naprave do oblaka (telemetrija) in od oblaka do naprave (ukazi), kar je ključna zahteva za daljinsko upravljanje naprav.
Razumevanje kakovosti storitve (QoS)
MQTT ponuja tri ravni kakovosti storitve (QoS), ki razvijalcem omogočajo izbiro pravega ravnovesja med zanesljivostjo in obremenitvijo za njihov specifičen primer uporabe.
- QoS 0 (Največ enkrat): To je raven "pošlji in pozabi". Sporočilo je poslano enkrat, brez potrditve prejema s strani posrednika ali končnega naročnika. To je najhitrejša metoda, vendar ne ponuja nobenega jamstva za dostavo. Primer uporabe: Nekritični, visokofrekvenčni podatki senzorjev, kot je odčitek sobne temperature, poslan vsakih 10 sekund. Izguba enega odčitka ni problem.
- QoS 1 (Vsaj enkrat): Ta raven zagotavlja, da bo sporočilo dostavljeno vsaj enkrat. Pošiljatelj shrani sporočilo, dokler ne prejme potrditve (paket PUBACK) od prejemnika. Če potrditev ni prejeta, se sporočilo ponovno pošlje. To lahko včasih povzroči podvojena sporočila, če se potrditev izgubi. Primer uporabe: Ukaz za vklop pametne luči. Želite biti prepričani, da je ukaz prejet, in če ga prejmete dvakrat, to ne povzroči škode.
- QoS 2 (Točno enkrat): To je najbolj zanesljiva, a tudi najpočasnejša raven. Uporablja štiridelno potrditev za zagotovitev, da je sporočilo dostavljeno točno enkrat, brez dvojnikov. Primer uporabe: Kritične operacije, kjer bi lahko bili dvojniki katastrofalni, kot so finančne transakcije, ukaz za doziranje natančne količine zdravila ali upravljanje robotske roke v tovarni.
Priprava vašega Python MQTT okolja
Pojdimo zdaj k praksi. Za začetek gradnje aplikacij MQTT s Pythonom potrebujete dve stvari: knjižnico Python za odjemalca MQTT in posrednika MQTT za komunikacijo.
Izbira knjižnice Python MQTT: Paho-MQTT
Najbolj razširjena in zrela knjižnica MQTT za Python je Paho-MQTT fundacije Eclipse. Je robustna knjižnica, bogata s funkcijami, ki ponuja razred odjemalca za povezavo s posrednikom ter objavljanje ali naročanje na teme. Namestitev je preprosta z uporabo pip, Pythonovega upravitelja paketov.
Odprite svoj terminal ali ukazno vrstico in zaženite:
pip install paho-mqtt
Ta en sam ukaz namesti vse, kar potrebujete za začetek pisanja odjemalcev MQTT v Pythonu.
Nastavitev posrednika MQTT
Za posrednika imate več možnosti, od zagona na vašem lokalnem računalniku za razvoj do uporabe močne oblačne storitve za produkcijo.
- Lokalni posrednik (za razvoj in učenje): Najbolj priljubljena izbira za lokalnega posrednika je Mosquitto, še en projekt Eclipse. Je lahek, odprtokoden in enostaven za namestitev.
- Na sistemih Linux, ki temeljijo na Debianu (kot so Ubuntu, Raspberry Pi OS):
sudo apt-get update && sudo apt-get install mosquitto mosquitto-clients - Na macOS (z uporabo Homebrew):
brew install mosquitto - Na Windowsih: Prenesite namestitveni program z uradne spletne strani Mosquitto.
127.0.0.1alilocalhost). - Na sistemih Linux, ki temeljijo na Debianu (kot so Ubuntu, Raspberry Pi OS):
- Javni/oblačni posrednik (za hitro testiranje): Za začetne poskuse brez nameščanja lahko uporabite brezplačnega javnega posrednika. Dva priljubljena sta
test.mosquitto.orginbroker.hivemq.com. Pomembno: Ti posredniki so javni in nešifrirani. Nanju ne pošiljajte nobenih občutljivih ali zasebnih podatkov. Namenjeni so samo učenju in testiranju.
Praktični primer: Objavljanje in naročanje s Pythonom
Napišimo našo prvo aplikacijo MQTT v Pythonu. Ustvarili bomo dva ločena skripta: objavitelja, ki pošilja sporočila, in naročnika, ki jih prejema. V tem primeru bomo predpostavili, da poganjate lokalnega posrednika Mosquitto.
Ustvarjanje preprostega MQTT objavitelja (publisher.py)
Ta skripta se bo povezala s posrednikom in vsaki dve sekundi objavila sporočilo "Pozdravljen, MQTT!" na temo `python/mqtt/test`.
Ustvarite datoteko z imenom `publisher.py` in dodajte naslednjo kodo:
import paho.mqtt.client as mqtt
import time
# --- Konfiguracija ---
BROKER_ADDRESS = "localhost" # Za javnega posrednika uporabite 'test.mosquitto.org'
PORT = 1883
TOPIC = "python/mqtt/test"
# --- Povratni klic za povezavo ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Povezan s posrednikom MQTT!")
else:
print(f"Povezava ni uspela, koda napake {rc}")
# --- Glavni skript ---
# 1. Ustvarite primerek odjemalca
client = mqtt.Client("PublisherClient")
# 2. Dodelite povratni klic on_connect
client.on_connect = on_connect
# 3. Povežite se s posrednikom
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. Zaženite omrežno zanko v ozadju
client.loop_start()
try:
count = 0
while True:
count += 1
message = f"Pozdravljen, MQTT! Sporočilo #{count}"
# 5. Objavite sporočilo
result = client.publish(TOPIC, message)
# Preverite, ali je bila objava uspešna
status = result[0]
if status == 0:
print(f"Poslano `{message}` na temo `{TOPIC}`")
else:
print(f"Pošiljanje sporočila na temo {TOPIC} ni uspelo")
time.sleep(2)
except KeyboardInterrupt:
print("Objava ustavljena.")
finally:
# 6. Ustavite omrežno zanko in prekinite povezavo
client.loop_stop()
client.disconnect()
print("Povezava s posrednikom prekinjena.")
Ustvarjanje preprostega MQTT naročnika (subscriber.py)
Ta skripta se bo povezala z istim posrednikom, se naročila na temo `python/mqtt/test` in izpisala vsa prejeta sporočila.
Ustvarite drugo datoteko z imenom `subscriber.py`:
import paho.mqtt.client as mqtt
# --- Konfiguracija ---
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "python/mqtt/test"
# --- Funkcije povratnega klica ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Povezan s posrednikom MQTT!")
# Ob uspešni povezavi se naročite na temo
client.subscribe(TOPIC)
else:
print(f"Povezava ni uspela, koda napake {rc}")
def on_message(client, userdata, msg):
# Dekodirajte vsebino sporočila iz bajtov v niz
payload = msg.payload.decode()
print(f"Prejeto sporočilo: `{payload}` na temi `{msg.topic}`")
# --- Glavni skript ---
# 1. Ustvarite primerek odjemalca
client = mqtt.Client("SubscriberClient")
# 2. Dodelite povratne klice
client.on_connect = on_connect
client.on_message = on_message
# 3. Povežite se s posrednikom
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. Zaženite omrežno zanko (blokirajoči klic)
# Ta funkcija samodejno obravnava ponovno povezovanje in obdelavo sporočil.
print("Naročnik posluša...")
client.loop_forever()
Zagon primera
- Odprite dva ločena terminalska okna.
- V prvem terminalu zaženite skript naročnika:
python subscriber.py - Morali bi videti sporočilo "Naročnik posluša...". Zdaj čaka na sporočila.
- V drugem terminalu zaženite skript objavitelja:
python publisher.py - Videli boste, da objavitelj pošilja sporočila vsaki dve sekundi. Hkrati se bodo ta sporočila pojavila v terminalskem oknu naročnika.
Čestitamo! Pravkar ste ustvarili popoln, delujoč komunikacijski sistem MQTT z uporabo Pythona.
Onkraj osnov: Napredne funkcije Paho-MQTT
Realni sistemi IoT zahtevajo večjo robustnost kot naš preprost primer. Raziščimo nekatere napredne funkcije MQTT, ki so bistvene za izgradnjo produkcijsko pripravljenih aplikacij.
Zadnja volja in oporoka (LWT)
Kaj se zgodi, če se kritična naprava, kot je varnostna kamera ali srčni monitor, nepričakovano prekine zaradi izpada električne energije ali izgube omrežja? Funkcija LWT je rešitev MQTT. Ko se odjemalec poveže, lahko pri posredniku registrira sporočilo "zadnje volje". Če se odjemalec prekine na nepredviden način (brez pošiljanja paketa DISCONNECT), bo posrednik v njegovem imenu samodejno objavil to sporočilo zadnje volje na določeno temo.
To je neprecenljivo za spremljanje stanja naprav. Naprava lahko ob povezavi objavi sporočilo `devices/device-123/status` z vsebino `"online"` in registrira sporočilo LWT z isto temo, vendar z vsebino `"offline"`. Vsaka nadzorna storitev, naročena na to temo, bo takoj vedela za stanje naprave.
Za implementacijo LWT v Paho-MQTT ga nastavite pred povezovanjem:
client.will_set('devices/device-123/status', payload='offline', qos=1, retain=True)
client.connect(BROKER_ADDRESS, PORT, 60)
Zadržana sporočila
Običajno bo naročnik, ki se poveže na temo, prejel samo sporočila, ki so objavljena potem, ko se je naročil. Kaj pa, če takoj potrebujete zadnjo vrednost? Za to so namenjena zadržana sporočila. Ko je sporočilo objavljeno z zastavico `retain` nastavljeno na `True`, posrednik to sporočilo shrani za to specifično temo. Vsakič, ko se nov odjemalec naroči na to temo, bo takoj prejel zadnje zadržano sporočilo.
To je idealno za informacije o stanju. Naprava lahko objavi svoje stanje (npr. `{"state": "ON"}`) z `retain=True`. Vsaka aplikacija, ki se zažene in naroči, bo takoj vedela trenutno stanje naprave, ne da bi morala čakati na naslednjo posodobitev.
V Paho-MQTT preprosto dodate zastavico `retain` v klic za objavo:
client.publish(TOPIC, payload, qos=1, retain=True)
Trajne in čiste seje
Zastavica `clean_session` v zahtevi za povezavo odjemalca nadzoruje, kako posrednik obravnava sejo odjemalca.
- Čista seja (
clean_session=True, privzeto): Ko se odjemalec prekine, posrednik zavrže vse informacije o njem, vključno z njegovimi naročninami in vsemi sporočili QoS 1 ali 2 v čakalni vrsti. Ko se ponovno poveže, je kot popolnoma nov odjemalec. - Trajna seja (
clean_session=False): Ko se odjemalec z edinstvenim ID-jem odjemalca poveže na ta način, posrednik ohrani njegovo sejo po prekinitvi. To vključuje njegove naročnine in vsa sporočila QoS 1 ali 2, ki so bila objavljena, medtem ko je bil brez povezave. Ko se odjemalec ponovno poveže, posrednik pošlje vsa zamujena sporočila. To je ključno za naprave na nezanesljivih omrežjih, ki si ne morejo privoščiti izgube kritičnih ukazov.
Za vzpostavitev trajne seje morate zagotoviti stabilen, edinstven ID odjemalca in nastaviti `clean_session=False` pri ustvarjanju primerka odjemalca:
client = mqtt.Client(client_id="my-persistent-device-001", clean_session=False)
Varnost ni izbira: Varovanje MQTT s Pythonom
V vsaki realni aplikaciji je varnost najpomembnejša. Nezaščiten posrednik MQTT je odprto vabilo za zlonamerne akterje, da prisluškujejo vašim podatkom, pošiljajo lažne ukaze vašim napravam ali sprožijo napade za zavrnitev storitve. Varovanje MQTT vključuje tri ključne stebre: avtentikacijo, šifriranje in avtorizacijo.
Avtentikacija: Kdo ste?
Avtentikacija preverja identiteto odjemalca, ki se povezuje s posrednikom. Najenostavnejša metoda je uporaba uporabniškega imena in gesla. Svojega posrednika Mosquitto lahko konfigurirate tako, da zahteva poverilnice, in jih nato posredujete v svojem odjemalcu Python.
V vašem odjemalcu Python uporabite metodo `username_pw_set()`:
client.username_pw_set(username="mojuporabnik", password="mojegeslo")
client.connect(BROKER_ADDRESS, PORT, 60)
Šifriranje: Zaščita podatkov med prenosom s TLS/SSL
Uporabniško ime in geslo sta malo koristna, če sta poslana kot navadno besedilo po omrežju. Šifriranje zagotavlja, da je vsa komunikacija med odjemalcem in posrednikom zakodirana in neberljiva za kogarkoli, ki bi prisluškoval omrežju. To se doseže z uporabo varnosti transportne plasti (TLS), enake tehnologije, ki varuje spletna mesta (HTTPS).
Za uporabo TLS z MQTT (pogosto imenovano MQTTS) morate svojega posrednika konfigurirati tako, da ga podpira (običajno na vratih 8883) in svojemu odjemalcu zagotoviti potrebna potrdila. To običajno vključuje potrdilo overitelja potrdil (CA) za preverjanje identitete posrednika.
V Paho-MQTT uporabite metodo `tls_set()`:
client.tls_set(ca_certs="pot/do/ca.crt")
client.connect(BROKER_ADDRESS, 8883, 60)
Avtorizacija: Kaj smete početi?
Ko je odjemalec avtenticiran, avtorizacija določa, kaj sme početi. Na primer, senzor temperature bi smel objavljati samo na svojo temo (npr. `sensors/temp-A/data`), ne pa na temo, ki se uporablja za nadzor strojev v tovarni (npr. `factory/floor-1/robot-arm/command`). To se običajno upravlja na posredniku z uporabo seznamov za nadzor dostopa (ACL). Posrednika konfigurirate s pravili, ki določajo, kateri uporabniki lahko `berejo` (se naročijo) ali `pišejo` (objavljajo) na določene vzorce tem.
Sestavljanje vsega skupaj: Preprost projekt pametnega okoljskega monitorja
Zgradimo nekoliko bolj realističen projekt, da utrdimo te koncepte. Simulirali bomo senzorsko napravo, ki objavlja okoljske podatke kot objekt JSON, in nadzorno aplikacijo, ki se naroči na te podatke in jih prikazuje.
Pregled projekta
- Senzor (objavitelj): Skript Python, ki simulira odčitke temperature in vlažnosti senzorja. Te podatke bo zapakiral v vsebino JSON in jih vsakih 5 sekund objavil na temo
smart_env/device01/telemetry. - Monitor (naročnik): Skript Python, ki se naroči na
smart_env/device01/telemetry, prejme podatke JSON, jih razčleni in izpiše uporabniku prijazno posodobitev stanja.
Koda senzorja (sensor_publisher.py)
import paho.mqtt.client as mqtt
import time
import json
import random
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
client = mqtt.Client("SensorDevice01")
client.connect(BROKER_ADDRESS, PORT, 60)
client.loop_start()
print("Objavitelj senzorja zagnan...")
try:
while True:
# Simulacija odčitkov senzorja
temperature = round(random.uniform(20.0, 30.0), 2)
humidity = round(random.uniform(40.0, 60.0), 2)
# Ustvarite vsebino JSON
payload = {
"timestamp": time.time(),
"temperature": temperature,
"humidity": humidity
}
payload_str = json.dumps(payload)
# Objavite sporočilo s QoS 1
result = client.publish(TOPIC, payload_str, qos=1)
result.wait_for_publish() # Blokira, dokler objava ni potrjena
print(f"Objavljeno: {payload_str}")
time.sleep(5)
except KeyboardInterrupt:
print("Ustavljanje objavitelja senzorja...")
finally:
client.loop_stop()
client.disconnect()
Koda nadzorne plošče (monitor_subscriber.py)
import paho.mqtt.client as mqtt
import json
import datetime
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
def on_connect(client, userdata, flags, rc):
print(f"Povezan s kodo rezultata {rc}")
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
print("--- Prejeto novo sporočilo ---")
try:
# Dekodirajte niz vsebine in ga razčlenite kot JSON
payload = json.loads(msg.payload.decode())
timestamp = datetime.datetime.fromtimestamp(payload.get('timestamp'))
temperature = payload.get('temperature')
humidity = payload.get('humidity')
print(f"Naprava: {msg.topic}")
print(f"Čas: {timestamp.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"Temperatura: {temperature}°C")
print(f"Vlažnost: {humidity}%")
except json.JSONDecodeError:
print("Napaka pri dekodiranju vsebine JSON.")
except Exception as e:
print(f"Prišlo je do napake: {e}")
client = mqtt.Client("MonitoringDashboard")
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS, PORT, 60)
print("Nadzorna plošča deluje...")
client.loop_forever()
Od prototipa do produkcije: Najboljše prakse MQTT
Premik vašega projekta iz preprostega skripta v robusten, razširljiv produkcijski sistem zahteva skrbno načrtovanje. Tu je nekaj bistvenih najboljših praks:
- Načrtujte jasno hierarhijo tem: Že na začetku skrbno načrtujte strukturo tem. Dobra hierarhija je opisna, razširljiva in omogoča prilagodljive naročnine z uporabo nadomestnih znakov. Pogost vzorec je
./ / / / - Milo obravnavajte prekinitve omrežja: Omrežja so nezanesljiva. Koda vašega odjemalca bi morala implementirati robustno logiko ponovnega povezovanja. Povratni klic `on_disconnect` v Paho-MQTT je idealno mesto za začetek tega, z implementacijo strategije, kot je eksponentno odstopanje, da se izognete preplavljanju omrežja s poskusi ponovnega povezovanja.
- Uporabljajte strukturirane podatkovne vsebine: Za vsebine sporočil vedno uporabljajte strukturiran format podatkov, kot sta JSON ali Protocol Buffers. To naredi vaše podatke samoopisne, verzljive in enostavne za razčlenjevanje različnim aplikacijam (napisanim v kateremkoli jeziku).
- Privzeto zavarujte vse: Ne uvajajte sistema IoT brez varnosti. Minimalno uporabite avtentikacijo z uporabniškim imenom/geslom in šifriranje TLS. Za višje varnostne potrebe raziščite avtentikacijo na podlagi potrdil odjemalca.
- Nadzirujte svojega posrednika: V produkcijskem okolju je vaš posrednik MQTT ključen del infrastrukture. Uporabljajte nadzorna orodja za spremljanje njegovega stanja, vključno s porabo CPU/pomnilnika, številom povezanih odjemalcev, hitrostjo sporočil in zavrženimi sporočili. Mnogi posredniki izpostavljajo posebno hierarhijo tem `$SYS`, ki zagotavlja te informacije o stanju.
Zaključek: Vaše potovanje s Pythonom in MQTT
Potovali smo od temeljnega "zakaj" MQTT do praktičnega "kako" ga implementirati s Pythonom. Spoznali ste moč modela objavi/naroči se, pomembnost QoS in ključno vlogo varnosti. Videli ste, kako knjižnica Paho-MQTT izjemno poenostavi gradnjo sofisticiranih odjemalcev, ki lahko objavljajo podatke senzorjev in se naročajo na ukaze.
MQTT je več kot le protokol; je temeljna tehnologija za internet stvari. Njegova lahkotnost in robustne funkcije so ga naredile za prvo izbiro milijonov naprav po vsem svetu, od pametnih mest in povezanega kmetijstva do industrijske avtomatizacije.
Potovanje se tu ne konča. Naslednji korak je, da te koncepte prenesete na pravo strojno opremo. Eksperimentirajte z Raspberry Pi, ESP32 ali drugimi mikrokrmilniki. Povežite fizične senzorje, integrirajte z oblačnimi platformami IoT in gradite aplikacije, ki komunicirajo s fizičnim svetom. S Pythonom in MQTT imate močan nabor orodij za izgradnjo naslednje generacije povezanih rešitev.